package com.ftg.product.util;

import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;


/**
 * 就是为了完成与前台数据进行交互
 * 后端向前端传递数据的时候的，唯一标识
 *
 * @author kangjx
 * @createTime 2022/8/19
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@AllArgsConstructor
public class JsonToWeb<T> {

    private long code;

    private String msg;

    private T data;


    public static <T> JsonToWeb success(T data) {
        return new JsonToWeb(JsonEnum.OK.getCode(), JsonEnum.OK.getMsg(), data);
    }

    public static <T> JsonToWeb success() {
        return new JsonToWeb(JsonEnum.OK.getCode(), JsonEnum.OK.getMsg(), null);
    }

    public static <T> JsonToWeb fail() {
        return new JsonToWeb(JsonEnum.FAILURE.getCode(), JsonEnum.FAILURE.getMsg(), null);
    }

    public static <T> JsonToWeb checkToken() {
        return new JsonToWeb(JsonEnum.NOT_TOKEN.getCode(), JsonEnum.NOT_TOKEN.getMsg(), null);
    }


    /**
     * 用来构造 没有数据返回 的前后台交互方法的 值
     * @param myenum   enum添加code msg
     * @param <T> 返回数据的类型
     * @return
     */
    public static <T> String build(JsonEnum myenum) {
        JSONObject json = new JSONObject();
        json.put("code",myenum.getCode());
        json.put("msg",myenum.getMsg());
        return json.toJSONString();
    }

    /**
     * 用来构造 带数据返回 的前后台交互方法的 值
     * @param myenum enum添加code msg
     * @param data   方法返回 值
     * @param <T> 返回数据的类型
     * @return
     */
    public static <T> String build(JsonEnum myenum,T data) {
        JSONObject json = new JSONObject();
        json.put("code",myenum.getCode());
        json.put("msg",myenum.getMsg());
        json.put("data",data);
        return json.toJSONString();
    }

    public static <T> String ok() {
        JSONObject json = new JSONObject();
        json.put("code",JsonEnum.OK.getCode());
        json.put("msg",JsonEnum.OK.getMsg());
        return json.toJSONString();
    }

    public static <T> String failure() {
        JSONObject json = new JSONObject();
        json.put("code",JsonEnum.FAILURE.getCode());
        json.put("msg",JsonEnum.FAILURE.getMsg());
        return json.toJSONString();
    }

}
